package cn.tianjindong.blog.mapper;

import cn.tianjindong.blog.pojo.BlogArticle;
import cn.tianjindong.blog.pojo.BlogArticleExample;
import cn.tianjindong.blog.pojo.BlogNoticeExample;

import java.util.List;
import org.apache.ibatis.annotations.Param;

public interface BlogArticleMapper {
	int countByExample(BlogArticleExample example);

	int deleteByExample(BlogArticleExample example);

	int deleteByPrimaryKey(Long id);

	/**
	 * 根据ID删除文章（将tab字段置为-1）,解除该条数据与category表的关联
	 * 
	 * @param id
	 * @return
	 */
	int deleteArticleById(Long id);

	int insert(BlogArticle record);

	int insertSelective(BlogArticle record);

	/**
	 * 插入数据后返回自增主键
	 * 
	 * @param record
	 * @return
	 */
	int insertReturnId(BlogArticle record);

	/**
	 * 分页查询当前页的文章简要信息(根据更新时间降序排列,只查询tab=1 or 0的数据，-1作废的数据不显示 )
	 * 
	 * @param startIndex
	 *            从第几条开始
	 * @param countItem
	 *            查询多少条
	 * @return
	 */
	List<BlogArticle> getBriefList(int startIndex, int countItem);
	
	
	/**
	 * 查询指定分类的文章(分页查询)
	 * @param startIndex
	 * @param countItem
	 * @return
	 */
	List<BlogArticle> getBriefListByCategoryAlias(int startIndex, int countItem,String alias);
	
	/**
	 * 先按照文章的访问次数进行排序，然后分页查询当前页的文章简要信息(不包含大文本content),根据访问次数,只查询tab=1的数据，0私有的，-1作废的数据不显示 
	 * 
	 * @param startIndex
	 *            从第几条开始
	 * @param countItem
	 *            查询多少条
	 * @return
	 */
	List<BlogArticle> getBriefListAndTabAndOrderByVisitNum(int startIndex, int countItem);
	
	/**
	 * 先按照文章的更新时间进行排序，然后分页查询当前页的文章简要信息(不包含大文本content),根据访问次数,只查询tab=1的数据，0私有的，-1作废的数据不显示 
	 * 
	 * @param startIndex
	 *            从第几条开始
	 * @param countItem
	 *            查询多少条
	 * @return
	 */
	List<BlogArticle> getBriefListAndTabAndOrderByUpdateTime(int startIndex, int countItem);
	/**
	 * 先按照文章的更新时间进行排序，然后分页查询当前页的文章简要信息(不包含大文本content，文章标签tag),关联查询文章的评论数，根据访问次数,只查询tab=1的数据，0私有的，-1作废的数据不显示 
	 * 适用于前台系统
	 * @param startIndex
	 *            从第几条开始
	 * @param countItem
	 *            查询多少条
	 * @return
	 */
	List<BlogArticle> getBriefListOrderByUpdateTime(int startIndex, int countItem);
	
	/**
	 * 对指定用户收藏的文章列表进行分页查询
	 * @param userId
	 * @param startIndex
	 * @param countItem
	 * @return
	 */
	List<BlogArticle> getCollectArticleListLimitAndTab(Long userId,int startIndex, Integer countItem);
	
	/**
	 * 获取指定标签所关联的所有文章
	 * @param tagId
	 * @param startIndex
	 * @param countItem
	 * @return
	 */
	List<BlogArticle> getTagArticleListLimitAndTab(Long tagId, int startIndex, Integer countItem);

	/**
	 * 通过id查文章，包括文章的标签，分类等相关对象的关联查询
	 * 
	 * @param id
	 * @return
	 */
	BlogArticle getArticleById(Long id);

	/**
	 * 获取文章的总访问量
	 * 
	 * @return
	 */
	Long getArticeVisitNum();
	
	/**
	 * 获取指定分类对应的文章的个数
	 * @return
	 */
	int countArticleByCategoryAlias(String alias);
	
	List<BlogArticle> selectByExampleWithBLOBs(BlogArticleExample example);

	List<BlogArticle> selectByExample(BlogArticleExample example);

	BlogArticle selectByPrimaryKey(Long id);

	int updateByExampleSelective(@Param("record") BlogArticle record, @Param("example") BlogArticleExample example);

	int updateByExampleWithBLOBs(@Param("record") BlogArticle record, @Param("example") BlogArticleExample example);

	int updateByExample(@Param("record") BlogArticle record, @Param("example") BlogArticleExample example);

	int updateByPrimaryKeySelective(BlogArticle record);

	int updateByPrimaryKeyWithBLOBs(BlogArticle record);

	int updateByPrimaryKey(BlogArticle record);

}